/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.





Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/

 

#ifndef NcModel_h
#define NcModel_h
#import <JDCloudOCSDKCharge/JDCloudOCSDKCharge.h>
#import <JDCloudOCSDKDisk/JDCloudOCSDKDisk.h>

@interface Logs :NSObject

/// Content
@property (strong,nonatomic,nonnull)  NSString*  content;


-(id) initWithContent:(NSString*) content;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface SecurityGroupSimple :NSObject

/// 安全组ID
@property (strong,nonatomic,nonnull)  NSString*  groupId;

/// 安全组名称
@property (strong,nonatomic,nonnull)  NSString*  groupName;


-(id) initWithGroupId:(NSString*) groupId
    groupName:(NSString*)groupName;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NetworkInterfacePrivateIp :NSObject

/// 私有IP的IPV4地址
@property (strong,nonatomic,nonnull)  NSString*  privateIpAddress;

/// 私有IP的IPV4地址
@property (strong,nonatomic,nonnull)  NSString*  elasticIpId;

/// 弹性IP实例地址
@property (strong,nonatomic,nonnull)  NSString*  elasticIpAddress;


-(id) initWithPrivateIpAddress:(NSString*) privateIpAddress
    elasticIpId:(NSString*)elasticIpId
    elasticIpAddress:(NSString*)elasticIpAddress;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface LogOption :NSObject

/// null
@property (strong,nonatomic,nonnull)  NSString*  key;

/// null
@property (strong,nonatomic,nonnull)  NSString*  value;


-(id) initWithKey:(NSString*) key
    value:(NSString*)value;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface HostAlias :NSObject

/// 域名列表
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  hostnames;

/// IP地址
@property (strong,nonatomic,nonnull)  NSString*  ip;


-(id) initWithHostnames:(NSArray<NSString*>*) hostnames
    ip:(NSString*)ip;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface InstanceCloudDisk :NSObject

/// 云硬盘ID
@property (strong,nonatomic,nonnull)  NSString*  diskId;

/// 所属AZ
@property (strong,nonatomic,nonnull)  NSString*  az;

/// 硬盘名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 硬盘描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// 磁盘类型，取值为 ssd, premium-hdd 之一
@property (strong,nonatomic,nonnull)  NSString*  diskType;

/// 磁盘大小（GiB）
@property (strong,nonatomic,nonnull)  NSNumber*  diskSize;

/// 云硬盘状态，取值为 creating、available、in-use、extending、restoring、deleting、deleted、error_creating、error_deleting、error_restoring、error_extending 之一
@property (strong,nonatomic,nonnull)  NSString*  status;

/// 创建时间
@property (strong,nonatomic,nonnull)  NSString*  createTime;


-(id) initWithDiskId:(NSString*) diskId
    az:(NSString*)az
    name:(NSString*)name
    descriptionValue:(NSString*)descriptionValue
    diskType:(NSString*)diskType
    diskSize:(NSNumber*)diskSize
    status:(NSString*)status
    createTime:(NSString*)createTime;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NcQuota :NSObject

/// 类型
@property (strong,nonatomic,nonnull)  NSString*  resourceType;

/// 配额
@property (strong,nonatomic,nonnull)  NSNumber*  limit;

/// 已使用的数目
@property (strong,nonatomic,nonnull)  NSNumber*  used;


-(id) initWithResourceType:(NSString*) resourceType
    limit:(NSNumber*)limit
    used:(NSNumber*)used;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface EnvVar :NSObject

/// 环境变量名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 环境变量的值
@property (strong,nonatomic,nonnull)  NSString*  value;


-(id) initWithName:(NSString*) name
    value:(NSString*)value;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NetworkInterfaceSpec :NSObject

/// 子网ID
@property (strong,nonatomic,nonnull)  NSString*  subnetId;

/// 可用区，用户的默认可用区
@property (strong,nonatomic,nonnull)  NSString*  az;

/// 网卡主IP
@property (strong,nonatomic,nonnull)  NSString*  primaryIpAddress;

/// SecondaryIp列表
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  secondaryIpAddresses;

/// 自动分配的SecondaryIp数量
@property (strong,nonatomic,nonnull)  NSNumber*  secondaryIpCount;

/// 安全组ID列表
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  securityGroups;

/// PortSecurity，取值为0或者1，默认为1
@property (strong,nonatomic,nonnull)  NSNumber*  sanityCheck;

/// 描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;


-(id) initWithSubnetId:(NSString*) subnetId
    az:(NSString*)az
    primaryIpAddress:(NSString*)primaryIpAddress
    secondaryIpAddresses:(NSArray<NSString*>*)secondaryIpAddresses
    secondaryIpCount:(NSNumber*)secondaryIpCount
    securityGroups:(NSArray<NSString*>*)securityGroups
    sanityCheck:(NSNumber*)sanityCheck
    descriptionValue:(NSString*)descriptionValue;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface DockerRegistryData :NSObject

/// registry服务器地址
@property (strong,nonatomic,nonnull)  NSString*  server;

/// 用户名
@property (strong,nonatomic,nonnull)  NSString*  username;

/// 密码
@property (strong,nonatomic,nonnull)  NSString*  password;

/// 邮件地址
@property (strong,nonatomic,nonnull)  NSString*  email;


-(id) initWithServer:(NSString*) server
    username:(NSString*)username
    password:(NSString*)password
    email:(NSString*)email;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface InstanceNetworkInterface :NSObject

/// 弹性网卡ID
@property (strong,nonatomic,nonnull)  NSString*  networkInterfaceId;

/// 以太网地址
@property (strong,nonatomic,nonnull)  NSString*  macAddress;

/// 虚拟网络ID
@property (strong,nonatomic,nonnull)  NSString*  vpcId;

/// 描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// 安全组列表
@property (strong,nonatomic,nonnull)  NSArray<SecurityGroupSimple*>*  securityGroups;

/// 源和目标IP地址校验，取值为0或者1
@property (strong,nonatomic,nonnull)  NSNumber*  sanityCheck;

/// 网卡主IP
@property (strong,nonatomic,nonnull)  NetworkInterfacePrivateIp*  primaryIp;

/// null
@property (strong,nonatomic,nonnull)  NSArray<NetworkInterfacePrivateIp*>*  secondaryIps;


-(id) initWithNetworkInterfaceId:(NSString*) networkInterfaceId
    macAddress:(NSString*)macAddress
    vpcId:(NSString*)vpcId
    descriptionValue:(NSString*)descriptionValue
    securityGroups:(NSArray<SecurityGroupSimple*>*)securityGroups
    sanityCheck:(NSNumber*)sanityCheck
    primaryIp:(NetworkInterfacePrivateIp*)primaryIp
    secondaryIps:(NSArray<NetworkInterfacePrivateIp*>*)secondaryIps;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface InstanceNetworkInterfaceAttachment :NSObject

/// 指明删除实例时是否删除网卡
@property (strong,nonatomic,nonnull)  NSNumber*  autoDelete;

/// 设备Index
@property (strong,nonatomic,nonnull)  NSNumber*  deviceIndex;

/// 绑定状态
@property (strong,nonatomic,nonnull)  NSString*  attachStatus;

/// 绑定时间
@property (strong,nonatomic,nonnull)  NSString*  attachTime;

/// 弹性网卡信息
@property (strong,nonatomic,nonnull)  InstanceNetworkInterface*  networkInterface;


-(id) initWithAutoDelete:(NSNumber*) autoDelete
    deviceIndex:(NSNumber*)deviceIndex
    attachStatus:(NSString*)attachStatus
    attachTime:(NSString*)attachTime
    networkInterface:(InstanceNetworkInterface*)networkInterface;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface VolumeMount :NSObject

/// 环境变量名称
@property (strong,nonatomic,nonnull)  NSString*  category;

/// 自动删除，删除容器时自动删除此volume
@property (strong,nonatomic,nonnull)  NSNumber*  autoDelete;

/// 容器内的挂载目录
@property (strong,nonatomic,nonnull)  NSString*  mountPath;

/// 只读，默认false；只针对data volume有效，root volume为false
@property (strong,nonatomic,nonnull)  NSNumber*  readOnly;

/// 云硬盘规格
@property (strong,nonatomic,nonnull)  InstanceCloudDisk*  cloudDisk;

/// 指定volume文件系统类型，目前支持[xfs, ext4]
@property (strong,nonatomic,nonnull)  NSString*  fsType;


-(id) initWithCategory:(NSString*) category
    autoDelete:(NSNumber*)autoDelete
    mountPath:(NSString*)mountPath
    readOnly:(NSNumber*)readOnly
    cloudDisk:(InstanceCloudDisk*)cloudDisk
    fsType:(NSString*)fsType;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface ElasticIpSpec :NSObject

/// 弹性公网IP的限速 单位：MB
@property (strong,nonatomic,nonnull)  NSNumber*  bandwidthMbps;

/// IP服务商，取值为bgp或no_bg
@property (strong,nonatomic,nonnull)  NSString*  provider;

/// 计费配置
@property (strong,nonatomic,nonnull)  ChargeSpec*  chargeSpec;


-(id) initWithBandwidthMbps:(NSNumber*) bandwidthMbps
    provider:(NSString*)provider
    chargeSpec:(ChargeSpec*)chargeSpec;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface LogConfiguration :NSObject

/// 日志Driver名称  default：默认在本地分配10MB的存储空间，自动rotate
@property (strong,nonatomic,nonnull)  NSString*  logDriver;

/// 日志Driver的配置选项
@property (strong,nonatomic,nonnull)  LogOption*  options;


-(id) initWithLogDriver:(NSString*) logDriver
    options:(LogOption*)options;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface VolumeMountSpec :NSObject

/// 磁盘分类 cloud： 基于云硬盘的卷 root volume只能是cloud类型
@property (strong,nonatomic,nonnull)  NSString*  category;

/// 自动删除，删除容器时自动删除此volume，默认为True；只支持磁盘是云硬盘的场景
@property (strong,nonatomic,nonnull)  NSNumber*  autoDelete;

/// 容器内的挂载目录；root volume不需要指定，挂载目录是（/）；data volume必须指定；必须是绝对路径，不能包含(:)
@property (strong,nonatomic,nonnull)  NSString*  mountPath;

/// 只读，默认false；只针对data volume有效；root volume为false，也就是可读可写
@property (strong,nonatomic,nonnull)  NSNumber*  readOnly;

/// 云硬盘规格；随容器自动创建的云硬盘，不会对磁盘分区，只会格式化文件系统
@property (strong,nonatomic,nonnull)  DiskSpec*  cloudDiskSpec;

/// 云硬盘ID；如果使用已有的云硬盘，必须指定partion和fsType
@property (strong,nonatomic,nonnull)  NSString*  cloudDiskId;

/// 指定volume文件系统类型，目前支持[xfs, ext4]；如果新创建的盘，不指定文件系统类型默认格式化成xfs
@property (strong,nonatomic,nonnull)  NSString*  fsType;

/// 随容器自动创建的新盘，会自动格式化成指定的文件系统类型；挂载已有的盘，默认不会格式化，只会按照指定的fsType去挂载；如果希望格式化，必须设置此字段为true
@property (strong,nonatomic,nonnull)  NSNumber*  formatVolume;


-(id) initWithCategory:(NSString*) category
    autoDelete:(NSNumber*)autoDelete
    mountPath:(NSString*)mountPath
    readOnly:(NSNumber*)readOnly
    cloudDiskSpec:(DiskSpec*)cloudDiskSpec
    cloudDiskId:(NSString*)cloudDiskId
    fsType:(NSString*)fsType
    formatVolume:(NSNumber*)formatVolume;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface ContainerNetworkInterfaceAttachmentSpec :NSObject

/// 指明删除容器时是否删除网卡，默认True；当前只能是True
@property (strong,nonatomic,nonnull)  NSNumber*  autoDelete;

/// 设备Index
@property (strong,nonatomic,nonnull)  NSNumber*  deviceIndex;

/// 网卡接口规范
@property (strong,nonatomic,nonnull)  NetworkInterfaceSpec*  networkInterface;


-(id) initWithAutoDelete:(NSNumber*) autoDelete
    deviceIndex:(NSNumber*)deviceIndex
    networkInterface:(NetworkInterfaceSpec*)networkInterface;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface ContainerSpec :NSObject

/// 实例类型；参考[文档](https://www.jdcloud.com/help/detail/1992/isCatalog/1)
@property (strong,nonatomic,nonnull)  NSString*  instanceType;

/// 容器所属可用区
@property (strong,nonatomic,nonnull)  NSString*  az;

/// 容器名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 域名和IP映射的信息；&lt;/br&gt; 最大10个alias
@property (strong,nonatomic,nonnull)  NSArray<HostAlias*>*  hostAliases;

/// 主机名，规范请参考说明文档；默认容器ID
@property (strong,nonatomic,nonnull)  NSString*  hostname;

/// 容器执行命令，如果不指定默认是docker镜像的ENTRYPOINT
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  command;

/// 容器执行命令的参数，如果不指定默认是docker镜像的CMD
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  args;

/// 容器执行的环境变量；如果和镜像中的环境变量Key相同，会覆盖镜像中的值；&lt;/br&gt; 最大10对
@property (strong,nonatomic,nonnull)  NSArray<EnvVar*>*  envs;

/// 镜像名称 &lt;/br&gt; 1. Docker Hub官方镜像通过类似nginx, mysql/mysql-server的名字指定 &lt;/br&gt; &lt;/br&gt; repository长度最大256个字符，tag最大128个字符，registry最大255个字符 &lt;/br&gt; 下载镜像超时时间：10分钟
@property (strong,nonatomic,nonnull)  NSString*  image;

/// secret引用名称；使用Docker Hub和京东云CR的镜像不需要secret
@property (strong,nonatomic,nonnull)  NSString*  secret;

/// 容器是否分配tty。默认不分配
@property (strong,nonatomic,nonnull)  NSNumber*  tty;

/// 容器的工作目录。如果不指定，默认是根目录（/）；必须是绝对路径
@property (strong,nonatomic,nonnull)  NSString*  workingDir;

/// 根Volume信息
@property (strong,nonatomic,nonnull)  VolumeMountSpec*  rootVolume;

/// 挂载的数据Volume信息；最多7个
@property (strong,nonatomic,nonnull)  NSArray<VolumeMountSpec*>*  dataVolumes;

/// 主网卡主IP关联的弹性IP规格
@property (strong,nonatomic,nonnull)  ElasticIpSpec*  elasticIp;

/// 主网卡配置信息
@property (strong,nonatomic,nonnull)  ContainerNetworkInterfaceAttachmentSpec*  primaryNetworkInterface;

/// 容器日志配置信息；默认会在本地分配10MB的存储空间
@property (strong,nonatomic,nonnull)  LogConfiguration*  logConfiguration;

/// 容器描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// 计费配置；如不指定，默认计费类型是后付费-按使用时常付费
@property (strong,nonatomic,nonnull)  ChargeSpec*  charge;


-(id) initWithInstanceType:(NSString*) instanceType
    az:(NSString*)az
    name:(NSString*)name
    hostAliases:(NSArray<HostAlias*>*)hostAliases
    hostname:(NSString*)hostname
    command:(NSArray<NSString*>*)command
    args:(NSArray<NSString*>*)args
    envs:(NSArray<EnvVar*>*)envs
    image:(NSString*)image
    secret:(NSString*)secret
    tty:(NSNumber*)tty
    workingDir:(NSString*)workingDir
    rootVolume:(VolumeMountSpec*)rootVolume
    dataVolumes:(NSArray<VolumeMountSpec*>*)dataVolumes
    elasticIp:(ElasticIpSpec*)elasticIp
    primaryNetworkInterface:(ContainerNetworkInterfaceAttachmentSpec*)primaryNetworkInterface
    logConfiguration:(LogConfiguration*)logConfiguration
    descriptionValue:(NSString*)descriptionValue
    charge:(ChargeSpec*)charge;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface Secret :NSObject

/// 机密数据名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 私密数据的类型，目前仅支持如下类型：docker-registry：用来和docker registry认证的类型
@property (strong,nonatomic,nonnull)  NSString*  type;

/// 创建时间
@property (strong,nonatomic,nonnull)  NSString*  createdAt;

/// 机密的数据
@property (strong,nonatomic,nonnull)  DockerRegistryData*  data;


-(id) initWithName:(NSString*) name
    type:(NSString*)type
    createdAt:(NSString*)createdAt
    data:(DockerRegistryData*)data;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface Container :NSObject

/// 容器ID
@property (strong,nonatomic,nonnull)  NSString*  containerId;

/// 容器状态
@property (strong,nonatomic,nonnull)  NSString*  status;

/// 实例类型
@property (strong,nonatomic,nonnull)  NSString*  instanceType;

/// 可用区
@property (strong,nonatomic,nonnull)  NSString*  az;

/// 容器名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 域名和IP映射的信息
@property (strong,nonatomic,nonnull)  NSArray<HostAlias*>*  hostAliases;

/// 主机名
@property (strong,nonatomic,nonnull)  NSString*  hostname;

/// 容器执行命令
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  command;

/// 容器执行命令的参数
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  args;

/// 动态指定的容器执行的环境变量
@property (strong,nonatomic,nonnull)  NSArray<EnvVar*>*  envs;

/// 镜像名称
@property (strong,nonatomic,nonnull)  NSString*  image;

/// secret引用的名称
@property (strong,nonatomic,nonnull)  NSString*  secret;

/// 容器是否分配tty
@property (strong,nonatomic,nonnull)  NSNumber*  tty;

/// 容器的工作目录
@property (strong,nonatomic,nonnull)  NSString*  workingDir;

/// 根Volume信息
@property (strong,nonatomic,nonnull)  VolumeMount*  rootVolume;

/// 挂载的数据Volume信息
@property (strong,nonatomic,nonnull)  NSArray<VolumeMount*>*  dataVolumes;

/// 主网卡所属VPC的ID
@property (strong,nonatomic,nonnull)  NSString*  vpcId;

/// 主网卡所属子网的ID
@property (strong,nonatomic,nonnull)  NSString*  subnetId;

/// 主网卡主IP地址
@property (strong,nonatomic,nonnull)  NSString*  privateIpAddress;

/// 主网卡主IP绑定弹性IP的ID
@property (strong,nonatomic,nonnull)  NSString*  elasticIpId;

/// 主网卡主IP绑定弹性IP的地址
@property (strong,nonatomic,nonnull)  NSString*  elasticIpAddress;

/// 主网卡信息
@property (strong,nonatomic,nonnull)  InstanceNetworkInterfaceAttachment*  primaryNetworkInterface;

/// 弹性网卡信息
@property (strong,nonatomic,nonnull)  NSArray<InstanceNetworkInterfaceAttachment*>*  secondaryNetworkInterfaces;

/// 容器日志配置信息
@property (strong,nonatomic,nonnull)  LogConfiguration*  logConfiguration;

/// 计费配置信息
@property (strong,nonatomic,nonnull)  Charge*  charge;

/// 创建时间
@property (strong,nonatomic,nonnull)  NSString*  launchTime;

/// 容器终止原因
@property (strong,nonatomic,nonnull)  NSString*  reason;

/// 容器描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;


-(id) initWithContainerId:(NSString*) containerId
    status:(NSString*)status
    instanceType:(NSString*)instanceType
    az:(NSString*)az
    name:(NSString*)name
    hostAliases:(NSArray<HostAlias*>*)hostAliases
    hostname:(NSString*)hostname
    command:(NSArray<NSString*>*)command
    args:(NSArray<NSString*>*)args
    envs:(NSArray<EnvVar*>*)envs
    image:(NSString*)image
    secret:(NSString*)secret
    tty:(NSNumber*)tty
    workingDir:(NSString*)workingDir
    rootVolume:(VolumeMount*)rootVolume
    dataVolumes:(NSArray<VolumeMount*>*)dataVolumes
    vpcId:(NSString*)vpcId
    subnetId:(NSString*)subnetId
    privateIpAddress:(NSString*)privateIpAddress
    elasticIpId:(NSString*)elasticIpId
    elasticIpAddress:(NSString*)elasticIpAddress
    primaryNetworkInterface:(InstanceNetworkInterfaceAttachment*)primaryNetworkInterface
    secondaryNetworkInterfaces:(NSArray<InstanceNetworkInterfaceAttachment*>*)secondaryNetworkInterfaces
    logConfiguration:(LogConfiguration*)logConfiguration
    charge:(Charge*)charge
    launchTime:(NSString*)launchTime
    reason:(NSString*)reason
    descriptionValue:(NSString*)descriptionValue;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end

#endif /* NcModel_h */
